﻿//using System;

//namespace SharpSoft.CtrlInterface
//{
//    using System.Net;
//    using System.Net.Sockets;
//    using System.Text;
//    /// <summary>
//    /// for more info:http://w1.fi/wpa_supplicant/devel/ctrl_iface_page.html
//    /// </summary>
//    public class wpa_ctrl 
//    {
//        private Socket client;
//        private bool listening = false;
//        private Random random = new Random();
//        UnixDomainSocketEndPoint unixEp;//waiting for next version's UnixDomainSocketEndPoint
//        public event Action<string> MessageReply;
//        public event Action<int, string, string[]> CtrlEventNotify;
//        public wpa_ctrl(string ifname)
//        {
//            var serverPath = "/var/run/wpa_supplicant/" + ifname;
//            var clientPath = "/tmp/wpa_ctrl" + "." + Guid.NewGuid().ToString("N").Substring(0, 4);
//            client = new Socket(AddressFamily.Unix, SocketType.Unknown, ProtocolType.Unknown);
//            client.Bind(new UnixEndPoint(clientPath));
//            client.Listen(1);

//            unixEp = new UnixDomainSocketEndPoint(serverPath);
//        }
//        public void Dispose()
//        {
//            listening = false;
//            client?.Disconnect(false);
//            client?.Dispose();
//            client = null;
//        }


//        public void Connect()
//        {
//            client.Connect(unixEp);
//            listening = true;
//            receive();
//        }

//        private void receive()
//        {
//            if (!listening)
//            {
//                return;
//            }
//            SocketAsyncEventArgs e = new SocketAsyncEventArgs();
//            e.Completed += E_Completed;
//            client.ReceiveAsync(e);

//        }

//        private void E_Completed(object sender, SocketAsyncEventArgs e)
//        {
//            receive();
//            onmsg(e.Buffer);
//        }

//        private void onmsg(byte[] msg)
//        {
//            if (msg.Length > 3 && msg[0] == 60 && msg[2] == 62)
//            {
//                byte[] data = new byte[3];
//                msg.CopyTo(data, 0);//msg.slice(3)
//                this.onevent(msg[1] - 48, data);
//            }
//            else if (Encoding.ASCII.GetString(msg).Substring(0, 3).IndexOf("OK") != -1)
//            { // 心跳包

//            }
//            else
//            {
//                MessageReply?.Invoke(Encoding.ASCII.GetString(msg));
//            }
//        }

//        private void onevent(int level, byte[] data)
//        {
//            var messageParts = Encoding.ASCII.GetString(data).Split(' ');
//            var messageName = messageParts[0];

//            CtrlEventNotify?.Invoke(level, messageName, messageParts);
//        }

//        public void Disconnect()
//        {
//            client.Disconnect(true);
//            listening = false;
//        }

//        public void Request(string cmd)
//        {
//            client.Send(Encoding.ASCII.GetBytes(cmd));
//        }
//        //OK
//        public void SetLevel(int level)
//        {
//            this.Request($"LEVEL {level}");
//        }
//        //CTRL-EVENT-SCAN-RESULTS
//        public void Scan()
//        {
//            this.Request($"SCAN");
//        }
//        //split('\n') For Stations Then split('\n') For Station Properties(bssid, frequency, signal, encryption, ssid)。
//        public void GetScanResults()
//        {
//            this.Request("SCAN_RESULTS");
//        }
//    }
//}
